前面提到現行 NVIDIA 出貨的 Jetson Nano 統一搭載 16GB eMMC,勢必讓不少人疑惑,我的手機容量都 128GB 了, Jetson Nano 的 16GB 豈不是放一兩部影片(當然是指 AI 推論使用的素材)就沒空間了嗎?今天就來跟大家說擴充儲存容量的方法!
空間不夠放東西嗎?買一間倉庫吧!(誤) (source: unsplash)
由於 reComputer Jetson Nano 內建的 16 GB eMMC 在安裝 ubuntu 18.04 LTS 和 NVIDIA JetPack 4.6 後,剩餘的可用空間大約是 2.5GB 左右,因此在學習或開發上勢必要使用額外的裝置擴增使用空間。今天將使用 USB 隨身碟進行可用空間的擴充,如果要用 SSD 也是相同的做法,不過須注意 SSD 僅能使用在 J1020 上, J1010 無法使用(M.2 KEY 不同)。為了方便使用不影響外觀,筆者選用小尺寸的 USB 隨身碟,型號為 SanDisk CZ430 64 GB 隨身碟:
新的 USB 隨身碟在未做任何設定前,僅能作為一般儲存裝置使用,因此需要先將 USB 隨身碟格式化成 GPT(GUID Partition Table) 格式,請依照下列步驟進行 USB 隨身碟的 GPT 格式化:
1. 將 USB 隨身碟放入 reComputer 的 USB 3.0 連接埠
2. 點擊 Ubuntu 桌面左方的資料夾圖示,開啟資料夾視窗並確認 USB 隨身碟被正確掛載。
3. 使用滑鼠點擊 Ubuntu 桌面左上角的 Ubuntu icon 圖示後,在搜尋欄輸入「disk」並選擇工具「Disks」。
4. 在左側的設備選項中選擇 USB 隨身碟,並展開右上方的功能選項後,選擇【Format Disk】。
5. 在 【Partitioning】選項中選擇選項 【Compatible with modern systems and hard disks > 2TB(GPT)】,操作步驟畫面如下。
6. 點選磁碟標籤下方的圖示【+】進行磁碟分割 ,操作步驟畫面如下。
7. 確認磁碟分割區的空間大小,並點擊右上方的按鍵【Next】。
8. 請自由設定磁碟分割區的名稱與指定磁碟分割區的格式為【Internal disk for use with Linux systems only(Ext4)】後,點擊右上方的按鍵【Create】。
在 github 上有著開源專案「bootFromUSB」,可以使用版本控制器 git 將開源專案下載至系統中,利用快捷鍵 【ctrl】+【alt】+【T】開啟終端機視窗後,輸入指令進行下載:
git clone [https://github.com/jetsonhacks/bootFromUSB.git](https://github.com/jetsonhacks/bootFromUSB.git)
專案「bootFromUSB」中提及了使用 JetPack 4.5 以上的 Jetson Family 家族擁有指定開機裝置的特色,Jetson Nano 預先裝載至 eMMC 的系統為 ubuntu 18.04 與 NVIDIA Jetpack 4.6,因此可以經過設定後,讓 Jetson Nano 使用 USB 隨身碟開機,達成擴充儲存空間的功能。使用 USB 裝置開機的流程如下圖所示,Jetson Nano 上電時依然會載 eMMC 中的 Boot Loader 與 Kernel,後續則會存取 USB 作為 rootfs。
在終端機中輸入下列指令,確認 USB 隨身碟的硬體裝置代號:
ls /dev/sd*
若 reComputer 僅放入一個 USB 隨身碟,使用指令將可以查詢到隨身碟代號, 代號「/dev/sda1」是指 USB 隨身碟的第一個磁碟分割區,若無法搜尋到請重新執行上方的步驟【硬體裝置需求】。
請在終端機中輸入下列指令:$ ./bootFromUSB/copyRootToUSB.sh -p /dev/sda1
開始將 eMMC 磁碟內容備份至 USB 隨身碟。備份時間大約是 15分鐘左右,期間可以喝杯咖啡休息一下,舒緩一下過於僵硬的身體:)。
完成備份後的 USB 隨身碟在後續內容會以「備份隨身碟」稱呼。
為了確認 Jetson Nano 是使用那一個裝置進行開機,可以在 eMMC 磁碟家目錄裡,藉由下方指令新增一個無任何內容的純文字檔案,此後若是使用 eMMC 磁碟開機時,便可以在相對應的位置看到此文件檔案。
touch ~/This_is_emmC.txt
為了避免發生編輯上的意外,請先使用下列指令,將原始檔案「extlinux_conf」備份:
sudo cp /boot/extlinux/extlinux.conf /boot/extlinux/extlinux_backup.conf
下一步請輸入指令開始編輯檔案 /boot/extlinux/extlinux.conf:
sudo gedit /boot/extlinux/extlinux.conf
在標籤 LABEL 的內容中,可以找到屬性 APPEND,其中的參數 root 便是需要修改的地方,根據下列情況可以將參數 root 內容設為裝置代號或是備份隨身碟的 PARTUUID
若是 Jetson Nano 開機時僅會放入先前備份的 USB 隨身碟,可以直接將參數 root 的內容修改為「root=/dev/sda1」
若是 reComputer 在開機時需要載入多個隨身碟,系統將會隨意指派這些 USB 隨身碟的代號,因此需要使用備份隨身碟獨特的 PARTUUID 當作開機裝置的參數,請輸入下列指令以使用腳本檔案 /bootFromUSB/partUUID.sh 查詢備份隨身碟的 PARTUUID:
$ ./bootFromUSB/partUUID.sh
根據查詢的備份隨身碟【PARTUUID】,將檔案 /boot/extlinux/extlinux.conf 中的標籤 LABEL 的屬性 APPEND 的參數 root 設為 「root=PARTUUID=【PARTUUID】」,以本篇查詢到的【PARTUUID】為範例,檔案 /boot/extlinux/extlinux.conf 內容將變為如下圖所示:
根據需求修改完檔案 /boot/extlinux/extlinux.conf 內容後,便可以重新啟動 reComputer ,確認是否以備份隨身碟開機成功。
因為先前已經在 eMMC 的 Home 目錄中新增了檔案 This_is_eMMC.txt,重新開機後若是正常的使用備份隨身碟開機,將不會在 Home 目錄中看到檔案 This_is_eMMC.txt,並且在查看磁碟空間時能夠發現可用空間變多了。
由於 Jetson Nano 在開機時第一時間仍舊是讀取 eMMC 的開機資訊,並根據 eMMC 提供的內容將開機裝置導引至備份隨身碟,因此後續在 Jetson Nano 上的操作皆是針對備份隨身碟進行操作,可以先將此備份隨身碟使用備份軟體備份成 ISO 檔案,以利後續針對備份隨身碟的還原操作。另外,若是備份隨身碟在開機前並無放入 Jetson Nano 的 USB 連接埠,將會導致開機失敗喔!